﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using KWIS9000SERVER;

namespace QuizGUI
{
    /// <summary>
    /// GUI voor een jury bij een kwis van het type blokken.
    /// </summary>
    /// <author>Werner Goossens</author>
    public partial class JuryBlokkenGUI : Form
    {
        private KwisServer kwisServer;
        private string juryNaam;
        private List<Deelnemer> deelnemers = new List<Deelnemer>();
        private Boolean openforanswer;
        private List<String> antwoordmens = new List<String>();
        private int currentindex=0;


        public JuryBlokkenGUI()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Load event, vraagt om een naam en maakt verbinding met de server.
        /// </summary>
        /// <author>Werner Goossens</author>
        private void JuryBlokkenGUI_Load(object sender, EventArgs e)
        {
            kwisServer = new KwisServer();

            kwisServer.host.server.onConnection += new NetComm.Host.onConnectionEventHandler(Server_onConnection);
            kwisServer.host.server.lostConnection += new NetComm.Host.lostConnectionEventHandler(Server_lostConnection);
            kwisServer.host.server.DataReceived += new NetComm.Host.DataReceivedEventHandler(Server_DataReceived);
        }
        void Server_onConnection(string id)
        {
            //deze code voert uit als een client connect.
            if (id.Contains("j>"))
            {
                MessageBox.Show("Jurylid " + id.Substring(2) + " verbonden");
            }
            else
            {
                MessageBox.Show("Speler " + id + " verbonden");
                deelnemers.Add(new Deelnemer(id));
            }
        }

        void Server_lostConnection(string id)
        {
            //deze code voert uit als een client disconnect.
            MessageBox.Show(id + " disconnected");

        }


        /// <summary>
        /// Handelt het klikken op de 'punten'-knop.
        /// De methode laat toe punten toe te kennen aan een deelnemer voor het gegeven antwoord
        /// </summary>
        /// <author>Werner Goossens</author>
        private void bnPunten_Click(object sender, EventArgs e)
        {
            InputDialog frmPunten = new InputDialog("Puntenbedeling","punten:","",true) ;
            frmPunten.ShowDialog();

            if (frmPunten.DialogResult == System.Windows.Forms.DialogResult.OK)
            {
              
                //wijzig score
                frmPunten.Dispose();
            }
            

        }

        /// <summary>
        /// update de GUI wanneer deze gewijzigd wordt
        /// </summary>
        /// <author>Werner Goossens</author>
        private void updateGui()
        {

        }

        /// <summary>
        /// methode die de nodige data verzend naar de clients
        /// </summary>
        /// <author>Werner Goossens</author>
        private void zendData()
        {
            Messenger msngr = new Messenger();

            for (int i = 0; i < kwisServer.host.server.Users.Count; i++)
            {
                kwisServer.host.server.SendData(kwisServer.host.server.Users[i], msngr.getByteMessage);
            }
        }
       private void Server_DataReceived(string id, byte[] Data)
        {
            if (ConvertBytesToString(Data) == "druk")
            {
               openforanswer = true;
               antwoordmens.Add(id);
               textBox3.Text = "speler" + id;


           }
            if (openforanswer == true )
           {

              
               antwoordmens.Add(id);
              
           }

           // Console.Out.WriteLine(id + ": " + ConvertBytesToString(Data) + Environment.NewLine);


           //Updates the log textbox when new user joined
           

        }
        public static string ConvertBytesToString(byte[] bytes)
        {
            return ASCIIEncoding.ASCII.GetString(bytes);
        }

        public static byte[] ConvertStringToBytes(string str)
        {
            return ASCIIEncoding.ASCII.GetBytes(str);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            currentindex = currentindex + 1;
            textBox3.Text = antwoordmens.ElementAt(currentindex);
            
        }
    }
}
